////
////  THttpHandler.cs
////
////  Authors:
////		Fredrik Hedberg <fhedberg@availo.com>
////
////  Distributed under the Apache Public License
////

//using System;
//using System.Web;
//using System.Net;
//using System.IO;

//using Thrift.Protocol;

//namespace Thrift.Transport
//{
//    public class THttpHandler : IHttpHandler
//    {
//        protected TProcessor processor;

//        protected TProtocolFactory inputProtocolFactory;
//        protected TProtocolFactory outputProtocolFactory;

//        protected const string contentType = "application/x-thrift";
//        protected System.Text.Encoding encoding = System.Text.Encoding.UTF8;

//        public THttpHandler(TProcessor processor)
//            : this(processor, new TBinaryProtocol.Factory())
//        {

//        }
        
//        public THttpHandler(TProcessor processor, TProtocolFactory protocolFactory)
//            : this(processor, protocolFactory, protocolFactory)
//        {

//        }

//        public THttpHandler(TProcessor processor, TProtocolFactory inputProtocolFactory, TProtocolFactory outputProtocolFactory)
//        {
//            this.processor = processor;
//            this.inputProtocolFactory = inputProtocolFactory;
//            this.outputProtocolFactory = outputProtocolFactory;
//        }

//        public void ProcessRequest(HttpListenerContext context)
//        {
//            context.Response.ContentType = contentType;
//            context.Response.ContentEncoding = encoding;
//            ProcessRequest(context.Request.InputStream, context.Response.OutputStream);
//        }

//        public void ProcessRequest(HttpContext context)
//        {
//            context.Response.ContentType = contentType;
//            context.Response.ContentEncoding = encoding;
//            ProcessRequest(context.Request.InputStream, context.Response.OutputStream);
//        }

//        public void ProcessRequest(Stream input, Stream output)
//        {
//            TTransport transport = new TStreamTransport(input,output);

//            TProtocol inputProtocol = null;
//            TProtocol outputProtocol = null;

//            try
//            {
//                inputProtocol = inputProtocolFactory.GetProtocol(transport);
//                outputProtocol = outputProtocolFactory.GetProtocol(transport);

//                while (processor.Process(inputProtocol, outputProtocol)) { }
//            }
//            catch (TTransportException)
//            {
//                // Client died, just move on
//            }
//            catch (TApplicationException tx)
//            {
//                Console.Error.Write(tx);
//            }
//            catch (Exception x)
//            {
//                Console.Error.Write(x);
//            }

//            transport.Close();
//        }

//        public bool IsReusable
//        {
//            get { return true; }
//        }
//    }
//}
